home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1997-03-01 | 8.2 KB | 317 lines |
- 10 'ACCALC : A.C. CALCULATOR - 22 APR 94 rev. 27 SEP 96
- 20 IF EX$=""THEN EX$="EXIT"
- 30 CLS:KEY OFF
- 40 ON ERROR GOTO 2900
- 50 COLOR 7,0,1
- 60 UL$=STRING$(80,205)
- 70 U1$="###,###.#"
- 80 U2$="###,###.###"
- 90 U3$="###,###.##"
- 100 PI=3.14159
- 110 '
- 120 '.....start
- 130 CLS
- 140 RMS=0:AVG=0:PK=0:I=0:Z=0:PA=0:R=0:XL=0:XC=0
- 150 E=0:PR=0:PH=0:PF=0:X=0:F=0:C=0:U=0:PP=0
- 160 COLOR 15,2
- 170 PRINT " A.C. CALCULATOR";TAB(57);"by George Murphy VE3ERP ";
- 180 COLOR 1,0
- 190 PRINT STRING$(80,"<0xDF!>");
- 200 COLOR 7,0
- 210 PRINT " Press number in < > for:"
- 220 PRINT UL$;
- 230 PRINT " < 1 > Ohm's Law for A.C."
- 240 PRINT " < 2 > Impedance, Power Factor and Phase Angle"
- 250 PRINT " < 3 > Reactance, Frequency, Capacitance & Inductance (tuned cct.)"
- 260 PRINT " < 4 > Peak, Peak-to-Peak, RMS & Average voltages"
- 270 PRINT UL$;
- 280 PRINT " < 0 > Return to Main Menu"
- 290 Y$=INKEY$
- 300 IF Y$="0"THEN CLS:RUN EX$
- 310 IF Y$="1"THEN 370
- 320 IF Y$="2"THEN 980
- 330 IF Y$="3"THEN 1850
- 340 IF Y$="4"THEN 2280
- 350 GOTO 290
- 360 '
- 370 '.....ohm's law
- 380 CLS
- 390 COLOR 15,2
- 400 PRINT " OHM's LAW for A.C. "
- 410 COLOR 1,0
- 420 PRINT STRING$(80,"<0xDF!>");
- 430 COLOR 7,0
- 440 PRINT " If you do not have the data requested, press <ENTER>...
- 450 PRINT UL$;
- 460 IF RMS THEN 550
- 470 INPUT " ENTER: RMS Voltage.................Erms= ";RMS
- 480 GOSUB 670
- 490 IF RMS THEN 550
- 500 INPUT " ENTER: Average Voltage.............Eavg= ";AVG
- 510 GOSUB 670
- 520 IF RMS THEN 550
- 530 INPUT " ENTER: Peak Voltage................Epk = ";PK
- 540 GOSUB 670
- 550 IF I THEN 580
- 560 INPUT " ENTER: Current (in amperes)..........I = ";I
- 570 GOSUB 670
- 580 IF Z THEN 610
- 590 INPUT " ENTER: Impedance (in ohms))..........Z = ";Z
- 600 GOSUB 670
- 610 IF PA THEN 640
- 620 INPUT " ENTER: Apparent Power (in watts)....Pa = ";PA
- 630 GOSUB 670
- 640 VIEW PRINT 5 TO 24:CLS:VIEW PRINT:LOCATE 5
- 650 GOTO 460
- 660 '
- 670 '.....calculate
- 680 FOR Y=1 TO 5
- 690 IF PK=0 AND RMS<>0 THEN PK=RMS*SQR(2):GOTO 850
- 700 IF RMS=0 AND PK<>0 THEN RMS=PK/SQR(2):GOTO 850
- 710 IF RMS=0 AND PA*Z<>0 THEN RMS=SQR(PA*Z):GOTO 850
- 720 IF RMS=0 AND PA*I<>0 THEN RMS=PA/I:GOTO 850
- 730 IF AVG=0 AND PK<>0 THEN AVG=2/PI*PK:GOTO 850
- 740 IF PK=0 AND AVG<>0 THEN PK=PI/2*AVG:GOTO 850
- 750 IF RMS=0 AND I*Z<>0 THEN RMS=I*Z:GOTO 850
- 760 IF I=0 AND RMS*Z<>0 THEN I=RMS/Z:GOTO 850
- 770 IF I=0 AND PA*Z<>0 THEN I=SQR(PA/Z):GOTO 850
- 780 IF I=0 AND PA*RMS<>0 THEN I=PA/RMS:GOTO 850
- 790 IF Z=0 AND RMS*I<>0 THEN Z=RMS/I:GOTO 850
- 800 IF Z=0 AND PA*I<>0 THEN Z=PA/I^2:GOTO 850
- 810 IF Z=0 AND PA*RMS<>0 THEN Z=RMS^2/PA:GOTO 850
- 820 IF PA=0 AND I*Z<>0 THEN PA=I^2*Z:GOTO 850
- 830 IF PA=0 AND RMS*Z<>0 THEN PA=RMS^2/Z:GOTO 850
- 840 IF PA=Z AND RMS*I<>0 THEN PA=RMS*I:GOTO 850
- 850 NEXT Y
- 860 IF RMS*PK*AVG*I*Z THEN 880
- 870 RETURN
- 880 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 890 PRINT " AC Voltage (RMS).........";USING U1$;RMS
- 900 PRINT " AC Voltage (average).....";USING U1$;AVG
- 910 PRINT " AC Voltage (peak)........";USING U1$;PK
- 920 PRINT " Current (amperes)........";USING U2$;I
- 930 PRINT " Impedance (ohms).........";USING U1$;Z
- 940 PRINT " Volt-Amperes (watts).....";USING U1$;PA
- 950 PRINT UL$;
- 960 GOTO 2990
- 970 '
- 980 '.....impedance, power factor & phase angle
- 990 CLS
- 1000 COLOR 15,2
- 1010 PRINT " IMPEDANCE, POWER FACTOR & PHASE ANGLE "
- 1020 COLOR 1,0
- 1030 PRINT STRING$(80,"<0xDF!>");
- 1040 COLOR 7,0
- 1050 PRINT " If you do not have the data requested, press <ENTER>...
- 1060 PRINT UL$;
- 1070 '
- 1080 IF Z THEN 1110
- 1090 INPUT " ENTER: Impedance (ohms)................Z= ";Z
- 1100 GOSUB 1430
- 1110 IF R THEN 1140
- 1120 INPUT " ENTER: DC resistance (ohms)............R= ";R
- 1130 GOSUB 1430
- 1140 IF XL THEN 1170
- 1150 INPUT " ENTER: Inductive reactance (ohms).....Xl= ";XL
- 1160 GOSUB 1430
- 1170 IF XC THEN 1200
- 1180 INPUT " ENTER: Capacitive reactance (ohms)....Xc= ";XC
- 1190 GOSUB 1430
- 1200 IF E THEN 1230
- 1210 INPUT " ENTER: Volts (RMS).....................E= ";E
- 1220 GOSUB 1430
- 1230 IF I THEN 1260
- 1240 INPUT " ENTER: Current (amperes)...............I= ";I
- 1250 GOSUB 1430
- 1260 IF PA THEN 1290
- 1270 INPUT " ENTER: Apparent power (volt-amperes)..Pa= ";PA
- 1280 GOSUB 1430
- 1290 IF PR THEN 1320
- 1300 INPUT " ENTER: True power (watts).............Pr= ";PR
- 1310 GOSUB 1430
- 1320 IF PH THEN 1360
- 1330 INPUT " ENTER: Phase angle (degrees)..........Ph= ";PH
- 1340 PH=PH*PI/180 'radians
- 1350 GOSUB 1430
- 1360 IF PF THEN 1400
- 1370 INPUT " ENTER: Power Factor (from 0 to 1).....Pf= ";PF
- 1380 IF PF>1 THEN 1370
- 1390 GOSUB 1430
- 1400 VIEW PRINT 5 TO 24:CLS:VIEW PRINT:LOCATE 5
- 1410 GOTO 1080
- 1420 '
- 1430 '.....calculate
- 1440 FOR Y=1 TO 5
- 1450 IF Z=0 AND R*XL*XC<>0 THEN Z=SQR(R^2+(XL-XC)^2):GOTO 1630
- 1460 IF Z=0 AND R*PF<>0 THEN Z=R/PF:GOTO 1630
- 1470 IF R=0 AND Z*XL*XC<>0 THEN R=SQR(Z^2-(XL-XC)^2):GOTO 1630
- 1480 IF R=0 AND I*PR<>0 THEN R=PR/I^2:GOTO 1630
- 1490 IF R=0 AND Z*PF<>0 THEN R=Z*PF:GOTO 1630
- 1500 IF E=0 AND I*Z<>0 THEN E=I*Z:GOTO 1630
- 1510 IF E=0 AND I*PA<>0 THEN E=PA/I:GOTO 1630
- 1520 IF I=0 AND E*Z<>0 THEN I=E/Z:GOTO 1630
- 1530 IF I=0 AND E*PA<>0 THEN I=PA/E:GOTO 1630
- 1540 IF I=0 AND R*PR<>0 THEN I=SQR(PR/R):GOTO 1630
- 1550 IF PA=0 AND E*I<>0 THEN PA=E*I:GOTO 1630
- 1560 IF PA=0 AND PF*PR<>0 THEN PA=PR/PF:GOTO 1630
- 1570 IF PR=0 AND I*R<>0 THEN PR=I^2*R:GOTO 1630
- 1580 IF PR=0 AND PF*PA<>0 THEN PR=PF*PA:GOTO 1630
- 1590 IF PF=0 AND PR*PA<>0 THEN PF=PR/PA:GOTO 1630
- 1600 IF PF=0 AND R*Z<>0 THEN PF=R/Z:GOTO 1630
- 1610 IF PF=0 AND PH<>0 THEN PF=COS(PH):GOTO 1630
- 1620 IF PH=0 AND XL*XC*R<>0 THEN PH=ATN((XL-XC)/R):GOTO 1630
- 1630 NEXT Y
- 1640 IF R*XL*XC*I*PF THEN 1690
- 1650 IF R*Z*PF THEN 1690
- 1660 IF PH*PF THEN 1690
- 1670 RETURN
- 1680 '
- 1690 '.....print results
- 1700 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 1710 IF Z THEN PRINT " Impedance (ohms)...............";USING U1$;Z
- 1720 IF R THEN PRINT " DC resistance (ohms)...........";USING U1$;R
- 1730 IF XL THEN PRINT " Inductive reactance (ohms).....";USING U1$;XL
- 1740 IF XC THEN PRINT " Capacitive reactance (ohms)....";USING U1$;XC
- 1750 IF E THEN PRINT " AC Voltage (RMS)...............";USING U1$;E
- 1760 IF I THEN PRINT " Current (amperes)..............";USING U2$;I
- 1770 IF PA THEN PRINT " Apparent power (volt-amperes)..";USING U1$;PA
- 1780 IF PR THEN PRINT " True power (watts).............";USING U1$;PR
- 1790 IF PF THEN PRINT " Power factor...................";USING U2$;PF
- 1800 IF PH THEN PH=PH*180/PI
- 1810 IF PH THEN PRINT " Phase angle (degrees)..........";USING U2$;PH
- 1820 PRINT UL$;
- 1830 GOTO 2990
- 1840 '
- 1850 '.....reactance, frequency, capacitance & inductance
- 1860 CLS
- 1870 COLOR 15,2:PRINT " REACTANCE, FREQUENCY, CAPACITANCE & INDUCTANCE "
- 1880 COLOR 1,0:PRINT STRING$(80,"<0xDF!>");
- 1890 COLOR 7,0
- 1900 IF X THEN 1930
- 1910 INPUT " ENTER: Reactance (ohms).......X= ";X
- 1920 GOSUB 2050
- 1930 IF F THEN 1960
- 1940 INPUT " ENTER: Frequency (MHz)........F= ";F
- 1950 GOSUB 2050
- 1960 IF C THEN 1990
- 1970 INPUT " ENTER: Capacitance (pF).......C= ";C
- 1980 GOSUB 2050
- 1990 IF U THEN 2020
- 2000 INPUT " ENTER: Inductance (>H)........U= ";U
- 2010 GOSUB 2050
- 2020 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2030 GOTO 1900
- 2040 '
- 2050 '.....calculate
- 2060 FOR Z=1 TO 3
- 2070 IF U=0 AND C*F<>0 THEN U=25330/F^2/C:GOTO 2140
- 2080 IF U=0 AND X*F<>0 THEN U=X/(2*PI*F):GOTO 2140
- 2090 IF C=0 AND F*U<>0 THEN C=25330/F^2/U:GOTO 2140
- 2100 IF F=0 AND C*U<>0 THEN F=SQR(25330/C/U):GOTO 2140
- 2110 IF F=0 AND X*U<>0 THEN F=X/(2*PI*U):GOTO 2140
- 2120 IF F=0 AND X*C<>0 THEN F=10^6/(2*PI*X*C):GOTO 2140
- 2130 IF X=0 AND F*C<>0 THEN X=10^6/(2*PI*F*C):GOTO 2140
- 2140 NEXT Z
- 2150 IF U*C*F*X<>0 THEN 2180
- 2160 RETURN
- 2170 '
- 2180 '.....print results
- 2190 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2200 PRINT " Reactance (ohms)..........";USING U2$;X
- 2210 PRINT " Frequency (MHz)...........";USING U2$;F
- 2220 PRINT " Capacitance (pF)..........";USING U2$;C
- 2230 PRINT " Inductance (>H)...........";USING U2$;U
- 2240 PRINT UL$;
- 2250 X=0:F=0:C=0:U=0
- 2260 GOTO 2990
- 2270 '
- 2280 '.....equivalant voltages
- 2290 CLS
- 2300 COLOR 15,2
- 2310 PRINT " RELATIVE A.C. VOLTAGES "
- 2320 COLOR 1,0
- 2330 PRINT STRING$(80,"<0xDF!>");
- 2340 COLOR 7,0
- 2350 PRINT " Press number in < > to select KNOWN voltage:"
- 2360 PRINT UL$;
- 2370 PRINT " <1> Peak"
- 2380 PRINT " <2> Peak-to-Peak"
- 2390 PRINT " <3> RMS (Root Mean Square)"
- 2400 PRINT " <4> Average"
- 2410 PRINT UL$;
- 2420 Z$=INKEY$
- 2430 IF Z$="1"THEN 2490
- 2440 IF Z$="2"THEN 2570
- 2450 IF Z$="3"THEN 2650
- 2460 IF Z$="4"THEN 2730
- 2470 GOTO 2420
- 2480 '
- 2490 '.....Peak known
- 2500 INPUT " ENTER: Known PEAK voltage";PK
- 2510 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2520 PP=2*PK
- 2530 RMS=PK/SQR(2)
- 2540 AVG=2/PI*PK
- 2550 GOTO 2810
- 2560 '
- 2570 '.....Peak-to-Peak known
- 2580 INPUT " ENTER: Known PEAK-to-PEAK voltage";PP
- 2590 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2600 PK=PP/2
- 2610 RMS=PP/2/SQR(2)
- 2620 AVG=PP/PI
- 2630 GOTO 2810
- 2640 '
- 2650 '.....RMS known
- 2660 INPUT " ENTER: Known RMS voltage";RMS
- 2670 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2680 PK=RMS*SQR(2)
- 2690 PP=2*PK
- 2700 AVG=PP/PI
- 2710 GOTO 2810
- 2720 '
- 2730 '.....AVERAGE known
- 2740 INPUT " ENTER: Known AVERAGE voltage";AVG
- 2750 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2760 PK=PI/2*AVG
- 2770 PP=2*PK
- 2780 RMS=PK/SQR(2)
- 2790 GOTO 2810
- 2800 '
- 2810 '.....display equivalent values
- 2820 VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
- 2830 PRINT " PEAK voltage............";USING U2$;PK
- 2840 PRINT " PEAK-to-PEAK voltage....";USING U2$;PP
- 2850 PRINT " RMS voltage.............";USING U2$;RMS
- 2860 PRINT " AVERAGE voltage.........";USING U2$;AVG
- 2870 PRINT UL$;
- 2880 GOTO 2990
- 2890 '
- 2900 '.....error trap
- 2910 BEEP:CLS:LOCATE 3
- 2920 '
- 2930 PRINT " You may have entered something that is not valid or possible...."
- 2940 PRINT
- 2950 PRINT " Press any key to start over....."
- 2960 IF INKEY$=""THEN 2960
- 2970 CLS:GOTO 3010
- 2980 '
- 2990 '.....end
- 3000 GOSUB 3040
- 3010 GOTO 120 'start
- 3020 END
- 3030 '
- 3040 'HARDCOPY
- 3050 GOSUB 3160:LOCATE 25,2:COLOR 14,6
- 3060 PRINT " Press 1 to print screen, 2 to print screen & ";
- 3070 PRINT "advance paper, or 3 to continue.";:COLOR 7,0
- 3080 Z$=INKEY$:IF Z$="3"THEN GOSUB 3160:RETURN
- 3090 IF Z$="1"OR Z$="2"THEN GOSUB 3160:GOTO 3110
- 3100 GOTO 3080
- 3110 FOR QX=1 TO 24:FOR QY=1 TO 80
- 3120 LPRINT CHR$(SCREEN(QX,QY));
- 3130 NEXT QY:NEXT QX
- 3140 IF Z$="2"THEN LPRINT CHR$(12)
- 3150 GOTO 3050
- 3160 LOCATE 25,1:PRINT STRING$(80,32);:RETURN
-